home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 11
/
CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso
/
cucd
/
programming
/
oberonv4
/
source
/
system
/
out.mod
(
.txt
)
< prev
next >
Wrap
Oberon Text
|
1996-08-11
|
3KB
|
124 lines
Syntax10.Scn.Fnt
Syntax10b.Scn.Fnt
ParcElems
Alloc
MODULE Out; (* HM 18 March 1994 *)
See, and update if necessary the history at the bottom of the file.
IMPORT Display, Viewers, Texts, TextFrames, MenuViewers, Oberon;
out: Texts.Text;
v: Viewers.Viewer;
w: Texts.Writer;
PROCEDURE Open*;
VAR x, y: INTEGER;
BEGIN
Oberon.AllocateSystemViewer(0, x, y);
out := TextFrames.Text("");
v := MenuViewers.New(
TextFrames.NewMenu("Standard Output",
"^Out.Menu.Text"),
TextFrames.NewText(out, 0),
TextFrames.menuH, x, y)
END Open;
PROCEDURE Close*;
BEGIN
out := Oberon.Log; v := NIL
END Close;
PROCEDURE CheckOpen;
BEGIN
IF (out # Oberon.Log) & (v.state = 0) THEN Open END
END CheckOpen;
PROCEDURE CheckScroll (t: Texts.Text);
VAR x: INTEGER; v: Viewers.Viewer; f: Display.Frame; f1: TextFrames.Frame; r: Texts.Reader; ch: CHAR;
BEGIN
x := 0;
WHILE x < Display.Width DO
v := Viewers.This(x, 0);
WHILE v.state > 1 DO
f := v.dsc;
WHILE (f # NIL) & (f IS TextFrames.Frame) DO
f1 := f(TextFrames.Frame);
IF (f1.text = t) & (f1.H > 0) THEN
WHILE t.len > TextFrames.Pos(f1, f1.X + f1.W - 1, f1.Y + 1) DO
Texts.OpenReader(r, t, f1.org);
REPEAT Texts.Read(r, ch) UNTIL r.eot OR (ch = 0DX);
TextFrames.Show(f1, Texts.Pos(r));
END
END;
f := f.next
END;
v := Viewers.Next(v)
END;
x := x + v.W
END CheckScroll;
(*commands*)
PROCEDURE Char* (ch: CHAR);
BEGIN
CheckOpen; Texts.Write(w, ch); Texts.Append(out, w.buf)
END Char;
PROCEDURE Int* (i, n: LONGINT);
BEGIN
CheckOpen; Texts.WriteInt(w, i, n); Texts.Append(out, w.buf)
END Int;
PROCEDURE Real* (r: REAL; n: INTEGER);
BEGIN
CheckOpen; Texts.WriteReal(w, r, n); Texts.Append(out, w.buf)
END Real;
PROCEDURE LongReal* (r: LONGREAL; n: INTEGER);
BEGIN
CheckOpen; Texts.WriteLongReal(w, r, n); Texts.Append(out, w.buf)
END LongReal;
PROCEDURE Ln*;
VAR f: TextFrames.Frame;
BEGIN
CheckOpen; Texts.WriteLn(w); Texts.Append(out, w.buf);
CheckScroll(out)
END Ln;
PROCEDURE String* (s: ARRAY OF CHAR);
VAR i: INTEGER;
BEGIN
CheckOpen; i := 0;
WHILE s[i] # 0X DO
IF s[i] = "$" THEN Ln ELSE Texts.Write(w, s[i]) END;
INC(i)
END;
Texts.Append(out, w.buf)
END String;
PROCEDURE F0 (s: ARRAY OF CHAR; x: ARRAY OF LONGINT);
VAR i, j: INTEGER;
BEGIN
CheckOpen; i := 0; j := 0;
WHILE s[i] # 0X DO
IF s[i] = "$" THEN Ln
ELSIF s[i] = "#" THEN Int(x[j], 0); INC(j)
ELSE Texts.Write(w, s[i])
END;
INC(i)
END;
Texts.Append(out, w.buf)
END F0;
PROCEDURE F* (s: ARRAY OF CHAR; x: LONGINT);
VAR a: ARRAY 4 OF LONGINT;
BEGIN
a[0] := x; F0(s, a)
END F;
PROCEDURE F2* (s: ARRAY OF CHAR; x, y: LONGINT);
VAR a: ARRAY 4 OF LONGINT;
BEGIN
a[0] := x; a[1] := y; F0(s, a)
END F2;
PROCEDURE F3* (s: ARRAY OF CHAR; x, y, z: LONGINT);
VAR a: ARRAY 4 OF LONGINT;
BEGIN
a[0] := x; a[1] := y; a[2] := z; F0(s, a)
END F3;
PROCEDURE F4* (s: ARRAY OF CHAR; x, y, z, u: LONGINT);
VAR a: ARRAY 4 OF LONGINT;
BEGIN
a[0] := x; a[1] := y; a[2] := z; a[3] := u; F0(s, a)
END F4;
BEGIN
Texts.OpenWriter(w); out := Oberon.Log; v := NIL
END Out.
Date Author Modification
1996-07-31 claudio@dial.eunet.ch First unified version.